#ifndef CMD_HEADER
#define CMD_HEADER

#include<string>
#include<fstream>
#include<sstream>
#include<iostream>
#include<algorithm>
#include<iterator>
#include<vector>
#include<map>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<tclap/CmdLine.h>
#include "def.hpp"

using namespace TCLAP; // using the command line parser                                          
using namespace std;


/* This class is a Singleton */
class PuzaCMD{
public:
  static PuzaCMD* Instance();
  void parseCMD(int argc, char* argv[]);
private:
  PuzaCMD();  // private so that it can  not be called 
  PuzaCMD(PuzaCMD const&){}; // copy constructor is private
  ModelType checkModel(string temp_model);
  GeneratorType checkGenerator(string temp_generator);
  EstimatorType checkEstimator(string temp_estimator);
  PolyaEstimatorType checkPolyaEstimator(string temp_polya_estimator);
  TopicModelType checkTopicModelType(string temp_topicmodel_type);
  TopicModelTaskType checkTopicModelTaskType(string temp_task);
  static PuzaCMD* m_pInstance;
};

#endif
